package com.softtown.modules.workflow.dao;

import com.softtown.common.dao.BaseDao;
import com.softtown.modules.workflow.entity.SwfTaskEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author: Dingyayong
 * @Date: 2019/8/22 14:39
 * @Description:
 */
@Mapper
public interface SwfTaskDao extends BaseDao<SwfTaskEntity> {

    /**
     * 通过公司id 和创建者id 和流程实例 找出对应的审批任务
     *
     * @param compId
     * @param creator
     * @param procInstId
     * @return SwfTaskEntity
     * @author Dingyayong
     * @date 2019/8/26 11:34
     */
    SwfTaskEntity getSwfTaskByCreator(@Param("compId") Long compId, @Param("creator") Long creator, @Param("procInstId") Long procInstId);

    /**
     * 撤销通过公司id 和创建者id 和流程实例 找出对应的审批任务
     *
     * @param compId
     * @param creator
     * @param procInstId
     * @return SwfTaskEntity
     * @author Dingyayong
     * @date 2019/8/26 11:34
     */
    SwfTaskEntity getSwfTaskByCreatorByStatus(@Param("compId") Long compId, @Param("creator") Long creator, @Param("procInstId") Long procInstId);

    /**
     * 更新审批任务
     *
     * @param swfTaskEntity
     * @return
     * @author Dingyayong
     * @date 2019/8/26 14:32
     */
    void updateSwfTask(SwfTaskEntity swfTaskEntity);

    /**
     * 获取待我审批中的审批上一审批人
     *
     * @param compId
     * @param aprvUserId
     * @param procInstId
     * @return com.softtown.modules.entity.SwfTaskEntity
     * @Author fuming
     * @Date 2020/5/27 17:34
     */
    SwfTaskEntity getswfHstAprvLast(@Param("compId") Long compId, @Param("aprvUserId") Long aprvUserId, @Param("procInstId") Long procInstId);

    /**
     * 通过公司id 和流程实例 找出对应的审批任务
     *
     * @param compId
     * @param procInstId
     * @return SwfTaskEntity
     * @author Dingyayong
     * @date 2019/8/26 11:34
     */
    SwfTaskEntity getSwfTaskByApplByprocInstId(@Param("compId") Long compId, @Param("procInstId") Long procInstId);

    /**
     * 获取当前任务审批段
     *
     * @param compId
     * @param procInstId
     * @return SwfTaskEntity
     * @author Dingyayong
     * @date 2019/8/26 11:34
     */
    SwfTaskEntity getNowTaskPhase(@Param("compId") Long compId, @Param("procInstId") Long procInstId);

    /**
     * 获取当前审批人信息
     *
     * @param compId
     * @param procInstId
     * @return SwfTaskEntity
     * @author Dingyayong
     * @date 2019/8/26 11:34
     */
    SwfTaskEntity getNewApproveInfo(@Param("compId") Long compId, @Param("procInstId") Long procInstId);

    /**
     * 获取当前审批人岗位
     *
     * @param compId
     * @param aprvUserId
     * @param procInstId
     * @return com.softtown.modules.entity.SwfTaskEntity
     * @Author fuming
     * @Date 2020/5/27 17:34
     */
    SwfTaskEntity getswfHstAprvLastPosnName(@Param("compId") Long compId, @Param("aprvUserId") Long aprvUserId, @Param("procInstId") Long procInstId);

    /**
     * 获取最新任务
     *
     * @param compId
     * @param procInstId
     * @return SwfTaskEntity
     * @author Dingyayong
     * @date 2019/8/26 11:34
     */
    SwfTaskEntity getNewSwfTaskByApplByprocInstId(@Param("compId") Long compId, @Param("procInstId") Long procInstId);

    /**
     * 获取流程任务
     *
     * @param compId
     * @param procInstId
     * @return SwfTaskEntity
     * @author Dingyayong
     * @date 2019/8/26 11:34
     */
    List<SwfTaskEntity> getTaskByProcInstId(@Param("compId") Long compId, @Param("procInstId") Long procInstId);

    /**
     * @Author: Ding Ya Yong
     * @Description: 获取所有审批者
     * @Date: 2021/10/25 19:54
     * @Param: [compId, procInstId, applSeqNum]
     * @return: java.util.List<com.softtown.modules.entity.SwfTaskEntity>
     **/
    List<SwfTaskEntity> getAllApprover(@Param("compId") Long compId, @Param("procInstId") Long procInstId, @Param("applSeqNum") Integer applSeqNum);

    /**
     * @Author: Ding Ya Yong
     * @Description: 找出当前审批任务最新一次提交次数
     * @Date: 2021/10/31 8:54
     * @Param: [compId, procInstId]
     * @return: com.softtown.modules.entity.SwfTaskEntity
     **/
    SwfTaskEntity getMaxApplSeqNum(@Param("compId") Long compId, @Param("procInstId") Long procInstId);

}
